import axios from "axios";
import router from "../router";
import ElementUI from "element-ui";
import Nprogress from "nprogress";

//配置baseURL    判断环境
axios.defaults.baseURL =
  process.env.NODE_ENV === "development" ? "/api" : "http://www.chst.vip";

// axios.defaults.withCredentials = true; //允许携带认证

//创建axios的拦截器，可以给每个请求都携带上想要携带传递的内容

axios.interceptors.request.use(config => {
  Nprogress.done();
  // console.log(config.url)
  // console.log(config.url === "/users/login" )
  if (config.url === "/users/login") {
    return config;
  } else {
    //config 指的是  请求的每个对象
    // console.log(config)
    //  登录&注册是不需要  携带token
    let token = localStorage.getItem("Lorenzo");
    config.headers["authorization"] = token;

    //释放config
    return config;
  }
});

//响应拦截
axios.interceptors.response.use(config => {
  //释放拦截
  // console.log(config)
  let { data } = config;
  if (data.code == "1004" || data.code == "10022") {
    // 1004的状态码   判断一个状态码给前端使用  校验  token  校验失败，提示错误，并且让页面跳转到登录页

    ElementUI.Message.error("登录信息失效");
    localStorage.removeItem("Lorenzo");
    // console.log("出错额");
    router.push("/login");
    // window.location.reload()
    //死循环的问题出现在   登录信息失效的时候
    /**
     * 第一处的 细节处理
     * 响应拦截    判断状态码  1004 10022
     * 如果是  则router.push("/login")
     * 这时候  前置路由钩子(导航守卫)  会截胡它
     *
     * router.beforeEach((to,from,next))的步骤是这样的
     * 判断token是否存在，存在的话  进行下一步的操作
     * 在判断  store里面sideMenu侧边栏  有没有内容(应该没有的，因为还没请求)
     * 下一步，请求FETCH_MENULIST
     * 会得到 10022
     *
     * 这样拦截器  还是拦截了
     *
     * 造成了死循环
     */
  }
  return config;
});

axios.create({
  timeout: 4000
});

export default axios;
